import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/showRequest")
public class ShowRequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 调用一下刚才涉及到的几个关键 API并且把得到的结果组织到一个 html 中并作为响应的 body
        // 把api执行的结果放到stringBuilder
        // 下面这些方法 不太常用 比较常用的是GetParameter
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<h3>首行部分</h3>");
        stringBuilder.append(req.getProtocol());//返回请求协议的名称和版本
        stringBuilder.append("<br>");
        stringBuilder.append(req.getMethod());//返回请求的 HTTP 方法的名称，例如，GET、POST 或 PUT
        stringBuilder.append("<br>");
        stringBuilder.append(req.getRequestURI());//从协议名称直到 HTTP 请求的第一行的查询字符串中，返回该请求的 URL 的一部分
        stringBuilder.append("<br>");
        stringBuilder.append(req.getContextPath());//返回指示请求上下文的请求 URI 部分
        stringBuilder.append("<br>");
        stringBuilder.append(req.getQueryString());//返回包含在路径后的请求 URL 中的查询字符串
        stringBuilder.append("<br>");
        stringBuilder.append("<h3>header 部分</h3>");
        Enumeration<String> headerNames = req.getHeaderNames();//返回一个枚举，包含在该请求中包含的所有的头名
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            String headerValue = req.getHeader(headerName);//以字符串形式返回指定的请求头的值
            stringBuilder.append(headerName + ": " + headerValue + "<br>");
        }

        resp.setContentType("text/html; charset=utf8");
        resp.getWriter().write(stringBuilder.toString());
    }
}